Using Source Models and Building a Workflow

This notebook shows how to link together tools in the hmtk to build a workflow for constructing a PSHA source model

Source Models

The hmtk reads input model geometries in the form of a nrML file.

At present not all information in specfic sources can be constrained from existing hmtk tools (e.g. seismogenic depth limits, nodal plane distribution etc.). Therefore the source geometries and the missing information should be defined in an xml file a priori.

Loading and Viewing a Source Model


In [1]:
import numpy as np

from hmtk.plotting.mapping import HMTKBaseMap
from hmtk.parsers.source_model.nrml04_parser import nrmlSourceModelParser

# Import an Area Source Model
area_source_file = 'input_data/WT2006_Aegean_Sources.xml'
parser = nrmlSourceModelParser(area_source_file)
area_model = parser.read_file()

# Import a Simple Fault Source Model
fault_source_file = 'input_data/Greek_Faults_SHARE.xml'
parser = nrmlSourceModelParser(fault_source_file)
fault_model = parser.read_file(1.0)  # Fault surface meshes are rendered with a discretisation step of 1 km


Area source - ID: 1, name: Montenegro
Area source - ID: 2, name: Albania
Area source - ID: 3, name: TRGZ
Area source - ID: 4, name: Cephalonia Transform
Area source - ID: 5, name: South Ionian
Area source - ID: 6, name: Gulf of Corinth
Area source - ID: 7A, name: West Hellenic Outer
Area source - ID: 7B, name: East Hellenic Outer
Area source - ID: 8A, name: West Hellenic Inner
Area source - ID: 8B, name: East Hellenic Inner
Area source - ID: 9, name: Cyclades
Area source - ID: 10, name: North Anatolian Fault - Main Branch
Area source - ID: 11, name: North Anatolian Fault - Southenrn Branch
Simple Fault source - ID: 112, name: GRCS002
Simple Fault source - ID: 113, name: GRCS004
Simple Fault source - ID: 114, name: GRCS010
Simple Fault source - ID: 115, name: GRCS015
Simple Fault source - ID: 116, name: GRCS020
Simple Fault source - ID: 117, name: GRCS025
Simple Fault source - ID: 118, name: GRCS040
Simple Fault source - ID: 119, name: GRCS050
Simple Fault source - ID: 120, name: GRCS058
Simple Fault source - ID: 121, name: GRCS060
Simple Fault source - ID: 122, name: GRCS070
Simple Fault source - ID: 123, name: GRCS072
Simple Fault source - ID: 124, name: GRCS077
Simple Fault source - ID: 125, name: GRCS100
Simple Fault source - ID: 126, name: GRCS110
Simple Fault source - ID: 127, name: GRCS120
Simple Fault source - ID: 128, name: GRCS130
Simple Fault source - ID: 129, name: GRCS140
Simple Fault source - ID: 130, name: GRCS145
Simple Fault source - ID: 131, name: GRCS150
Simple Fault source - ID: 132, name: GRCS155
Simple Fault source - ID: 133, name: GRCS160
Simple Fault source - ID: 134, name: GRCS170
Simple Fault source - ID: 135, name: GRCS240
Simple Fault source - ID: 136, name: GRCS245
Simple Fault source - ID: 137, name: GRCS250
Simple Fault source - ID: 138, name: GRCS260
Simple Fault source - ID: 139, name: GRCS265
Simple Fault source - ID: 140, name: GRCS270
Simple Fault source - ID: 141, name: GRCS280
Simple Fault source - ID: 142, name: GRCS285
Simple Fault source - ID: 143, name: GRCS288
Simple Fault source - ID: 144, name: GRCS290
Simple Fault source - ID: 145, name: GRCS300
Simple Fault source - ID: 146, name: GRCS310
Simple Fault source - ID: 147, name: GRCS330
Simple Fault source - ID: 148, name: GRCS350
Simple Fault source - ID: 149, name: GRCS355
Simple Fault source - ID: 150, name: GRCS357
Simple Fault source - ID: 151, name: GRCS390
Simple Fault source - ID: 152, name: GRCS400
Simple Fault source - ID: 153, name: GRCS405
Simple Fault source - ID: 154, name: GRCS410
Simple Fault source - ID: 155, name: GRCS415
Simple Fault source - ID: 156, name: GRCS420
Simple Fault source - ID: 157, name: GRCS425
Simple Fault source - ID: 158, name: GRCS430
Simple Fault source - ID: 159, name: GRCS442
Simple Fault source - ID: 160, name: GRCS453
Simple Fault source - ID: 161, name: GRCS470
Simple Fault source - ID: 162, name: GRCS473
Simple Fault source - ID: 163, name: GRCS480
Simple Fault source - ID: 164, name: GRCS488
Simple Fault source - ID: 165, name: GRCS500
Simple Fault source - ID: 166, name: GRCS510
Simple Fault source - ID: 167, name: GRCS518
Simple Fault source - ID: 168, name: GRCS520
Simple Fault source - ID: 169, name: GRCS540
Simple Fault source - ID: 170, name: GRCS555
Simple Fault source - ID: 171, name: GRCS560
Simple Fault source - ID: 172, name: GRCS562
Simple Fault source - ID: 173, name: GRCS564
Simple Fault source - ID: 174, name: GRCS575
Simple Fault source - ID: 175, name: GRCS580
Simple Fault source - ID: 176, name: GRCS582
Simple Fault source - ID: 177, name: GRCS583
Simple Fault source - ID: 178, name: GRCS584
Simple Fault source - ID: 179, name: GRCS586
Simple Fault source - ID: 180, name: GRCS601
Simple Fault source - ID: 181, name: GRCS602
Simple Fault source - ID: 182, name: GRCS603
Simple Fault source - ID: 183, name: GRCS604
Simple Fault source - ID: 184, name: GRCS605
Simple Fault source - ID: 185, name: GRCS606
Simple Fault source - ID: 186, name: GRCS607
Simple Fault source - ID: 187, name: GRCS696
Simple Fault source - ID: 188, name: GRCS697
Simple Fault source - ID: 189, name: GRCS698
Simple Fault source - ID: 190, name: GRCS699
Simple Fault source - ID: 191, name: GRCS700
Simple Fault source - ID: 192, name: GRCS708
Simple Fault source - ID: 193, name: GRCS710
Simple Fault source - ID: 194, name: GRCS715
Simple Fault source - ID: 195, name: GRCS725
Simple Fault source - ID: 196, name: GRCS730
Simple Fault source - ID: 197, name: GRCS748
Simple Fault source - ID: 198, name: GRCS750
Simple Fault source - ID: 199, name: GRCS760
Simple Fault source - ID: 200, name: GRCS774
Simple Fault source - ID: 201, name: GRCS778
Simple Fault source - ID: 202, name: GRCS779
Simple Fault source - ID: 203, name: GRCS780
Simple Fault source - ID: 204, name: GRCS810
Simple Fault source - ID: 205, name: GRCS815
Simple Fault source - ID: 206, name: GRCS820
Simple Fault source - ID: 207, name: GRCS831
Simple Fault source - ID: 208, name: GRCS835
Simple Fault source - ID: 209, name: GRCS837
Simple Fault source - ID: 210, name: GRCS838
Simple Fault source - ID: 211, name: GRCS840
Simple Fault source - ID: 212, name: GRCS845
Simple Fault source - ID: 213, name: GRCS850
Simple Fault source - ID: 214, name: GRCS853
Simple Fault source - ID: 215, name: GRCS855
Simple Fault source - ID: 216, name: GRCS865
Simple Fault source - ID: 217, name: GRCS868
Simple Fault source - ID: 218, name: GRCS870
Simple Fault source - ID: 219, name: GRCS873
Simple Fault source - ID: 220, name: GRCS880
Simple Fault source - ID: 221, name: GRCS900
Simple Fault source - ID: 222, name: GRCS905
Simple Fault source - ID: 223, name: GRCS907
Simple Fault source - ID: 224, name: GRCS910
Simple Fault source - ID: 225, name: GRCS912
Simple Fault source - ID: 226, name: GRCS915
Simple Fault source - ID: 227, name: GRCS937
Simple Fault source - ID: 228, name: GRCS938
Simple Fault source - ID: 229, name: GRCS940
Simple Fault source - ID: 230, name: GRCS943
Simple Fault source - ID: 231, name: GRCS947
Simple Fault source - ID: 232, name: GRCS952
Simple Fault source - ID: 233, name: GRCS954
Simple Fault source - ID: 234, name: GRCS956
Simple Fault source - ID: 235, name: GRCS958
Simple Fault source - ID: 236, name: GRCS960
Simple Fault source - ID: 237, name: GRCS962
Simple Fault source - ID: 238, name: GRCS965
Simple Fault source - ID: 239, name: GRCS970
Simple Fault source - ID: 240, name: GRCS972
Simple Fault source - ID: 241, name: GRCS974
Simple Fault source - ID: 242, name: GRCS976
Simple Fault source - ID: 243, name: GRCS978
Simple Fault source - ID: 244, name: GRCS979
Simple Fault source - ID: 245, name: GRCS980
Simple Fault source - ID: 246, name: GRCS981
Simple Fault source - ID: 247, name: GRCS983
Simple Fault source - ID: 248, name: GRCS985
Simple Fault source - ID: 249, name: GRCS990
Simple Fault source - ID: 250, name: GRCS991
Simple Fault source - ID: 251, name: GRCS996
Simple Fault source - ID: 252, name: GRCS999

View the sources in a map


In [3]:
map_config = {'min_lon': 18.0, 'max_lon': 32.0, 'min_lat': 33.0, 'max_lat': 43.0, 'resolution':'h'}
# Create a hmtk basemap
basemap1 = HMTKBaseMap(map_config, 'Source Models')
# Add fault sources
basemap1.add_source_model(fault_model, overlay=True)
# Add area sources
basemap1.add_source_model(area_model, area_border='b-')


Selection Tools

A specific tool is created as a placeholder for catalogue selection functionalities, including geographical selection tools


In [4]:
from hmtk.seismicity.selector import CatalogueSelector


# Load in the catalogue
from hmtk.parsers.catalogue.csv_catalogue_parser import CsvCatalogueParser
input_file = 'input_data/Aegean_ExtendedCat1.csv'
parser = CsvCatalogueParser(input_file)
catalogue = parser.read_file()

# Create an instance of the selector class
selector = CatalogueSelector(catalogue, create_copy=True)


Catalogue Attribute Identifier is not a recognised catalogue key
The selector class has the following methods: .within_polygon(polygon, distance=None) polygon = Polygon as instance of the openquake.hazardlib.geo.polygon.Polygon class distance = Can select events within a distance (km) outside of the polygon (Optional) .circular_distance_from_point(point, distance) point = Location (Long, Lat, Depth) as instance of the openquake.hazardlib.geo.point.Point class distance = Distance (in km) from the point for selection .cartesian_square_centred_on_point(point, distance) point = Location (Long, Lat, Depth) as instance of the openquake.hazardlib.geo.point.Point class distance = Width corresponding to half the square dimension .within_joyner_boore_distance(surface, distance) surface = Fault surface as instance of the openquake.hazardlib.geo.surface.SimpleFaultSurface or openquake.hazardlib.geo.surface.ComplexFaultSurface class distance = Joyner-Boore distance (km) .within_rupture_distance(surface, distance) surface = Fault surface as instance of the openquake.hazardlib.geo.surface.SimpleFaultSurface or openquake.hazardlib.geo.surface.ComplexFaultSurface class distance = Rupture distance (km) .within_time_period(start_time, end_time) start_time = Earliest time for selection (as instance of datetime.Datetime object) end_time = Latest time for selection (as instance of datetime.Datetime object) .within_depth_range(lower_depth=None, upper_depth=None) lower_depth = Lower depth (km) - defaults to infinity if not specified upper_depth = Upper depth (km) - defaults to zero if not specified .within_magnitude_range(lower_mag=None, upper_mag=None) lower_mag = Low magnitude (unbounded if none) upper_mag = Upper magnitude (unbounded if none)

The selection tools can be useful as stand-alone tools. However, they are often embedded within other methods found in other objects.

The best example of this is in the selection of earthquakes within a source.

In the following example we will select earthquakes within each of the area sources shown previously, counting the number of events in each source


In [9]:
for source in area_model.sources:
    # Selects the earthquakes within each polygon
    source.select_catalogue(selector)
    print 'Source Number %s - %s contains %8.0f events' %(source.id, source.name, source.catalogue.get_number_events())


Source Number 1 - Montenegro contains      160 events
Source Number 2 - Albania contains      744 events
Source Number 3 - TRGZ contains      149 events
Source Number 4 - Cephalonia Transform contains      791 events
Source Number 5 - South Ionian contains     1024 events
Source Number 6 - Gulf of Corinth contains      751 events
Source Number 7A - West Hellenic Outer contains      511 events
Source Number 7B - East Hellenic Outer contains     1481 events
Source Number 8A - West Hellenic Inner contains      340 events
Source Number 8B - East Hellenic Inner contains      328 events
Source Number 9 - Cyclades contains      347 events
Source Number 10 - North Anatolian Fault - Main Branch contains      609 events
Source Number 11 - North Anatolian Fault - Southenrn Branch contains      449 events

In [10]:
# Example - show earthquakes in the Gulf of Corinth zone
map_config_goc = {'min_lon': 21.0, 'max_lon': 25.0, 'min_lat': 37.0, 'max_lat': 39.0, 'resolution':'h'}

basemap2 = HMTKBaseMap(map_config_goc, 'Gulf of Corinth Seismicity')
basemap2.add_catalogue(area_model.sources[5].catalogue, overlay=True)
basemap2.add_source_model(area_model, area_border='k-')



In [ ]:


In [ ]: